package stream;

import java.util.ArrayList;
import java.util.function.Function;
import java.util.stream.Stream;

/**
 * Date:2022/2/21
 * Author:ybc
 * Description:
 */
public class MethodRefTest {

    public static void main(String[] args) {

        ArrayList<String> one = new ArrayList<>();
        one.add("迪丽热巴");
        one.add("宋远桥");
        one.add("苏星河");
        one.add("石破天");
        one.add("石中玉");
        //方法引用的前提条件：lambda体中只有一句代码，且参数列表要和lambda体中所调用方法的参数一致
        //one.forEach(s-> System.out.println(s));
        //对象::方法名
        //one.forEach(System.out::println);
        //Stream.generate(()->Math.random()).forEach(System.out::println);
        //类名::方法名
        //Stream.generate(Math::random).forEach(System.out::println);
        //实例对象::方法名
        HandleStr handleStr = new HandleStr();
        //test("helloworld", s -> handleStr.handle(s));
        //test("helloworld", handleStr::handle);
        //one.stream().map(s->new Person(s));
        //类名::new
        //one.stream().map(Person::new);
        //参数必须为创建数组的长度时，可以使用方法引用
        //类型[]::new
        //Function<Integer, String[]> function = i -> new String[i];
        Function<Integer, String[]> function = String[]::new;
    }

    public static void test(String s, InterfaceA interfaceA){
        interfaceA.printStr(s);
    }

}
